﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; using Montana.DAC;
using System.Data;

namespace Montana.Entidades
{
    public class ListaPrecioProducto : Datos<ListaPrecioProducto>
    {
        public int IDListaprecio { get; set; }
        public int IDProducto { get; set; }        
        public string CodigoProducto { get; set; }
        public string Producto { get; set; }
        public string Listaprecio { get; set; }
        public decimal Preciooriginal { get; set; }
        public decimal Preciomanoobra { get; set; }

        protected override string SQLBasico
        {
            get
            {
                return @"select lpp.*, p.nombre as producto, lp.nombre as listaprecio, p.codigo as codigoproducto
                        , p.preciooriginal, p.preciomanoobra
                        from ((listaprecioproducto lpp inner join producto p on lpp.idproducto=p.id) 
                                inner join listaprecio lp on lp.id=lpp.idlistaprecio)";
            }
        }

        public decimal Precio
        {
            get
            {
                return Preciomanoobra != 0 ? Preciomanoobra : Preciooriginal;
            }
        }

        public List<ListaPrecioProducto> BuscarProductosPorLista(int idListaPrecio)
        {
            return TraerObjetos(SQLBasico + " where idlistaprecio=@idlistaprecio order by p.nombre", idListaPrecio);
        }

        public int Agregar()
        {
            Conectar();

            string sql = @"insert into listaprecioproducto (idlistaprecio, idproducto) values (@idlistaprecio, @idproducto)";

            Ejecutar(sql, this);

            int nuevoID = (int)TraerValor("SELECT @@IDENTITY");

            Desconectar();

            return nuevoID;
        }

        public bool SeCargoProducto(int idListaPrecio, int idProducto)
        {
            string sql = "select id from listaprecioproducto where idlistaprecio=@idlistaprecio and idproducto=@idproducto";

            return ExistenRegistros(sql, idListaPrecio, idProducto);
        }

        public void ActualizarPrecios(int idListaPrecio, decimal porcentaje, bool esAumento, bool actualizarPrecioOriginal)
        {
            string auxPorcentaje;

            if (esAumento)
            {
                //si porcentaje es 10% seria: 10 / 100 = 0,1 + 1 = 1,1 ... o sea 110%
                porcentaje = porcentaje / 100 + 1;                
            }
            else
            {
                //si porcentaje es 10% seria: 10% / 100 = 0,1 -> 1 - 0.1 = 0.9 ... o sea 90%
                porcentaje = 1 - porcentaje / 100;
            }
            auxPorcentaje = porcentaje.ToString().Replace(",", ".");

            string campoPrecio = "PrecioOriginal";
            if (!actualizarPrecioOriginal)
                campoPrecio = "PrecioManoObra";

            string sql = @"update producto
                            set " + campoPrecio + @" = (" + campoPrecio + @" * " + auxPorcentaje + @")
                            where id in 
                            (select idproducto from listaprecioproducto where idlistaprecio=" + idListaPrecio + ")";

            Ejecutar(sql);
        }

        public void QuitarProducto(int idListaPrecio, int idProducto)
        {
            string sql = @"delete from listaprecioproducto 
                            where idlistaprecio=" + idListaPrecio + " and idproducto=" + idProducto;

            Ejecutar(sql);
        }
    }
}
